home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / demo / menu / menu_v2.s < prev    next >
Text File  |  1997-01-31  |  38KB  |  1,670 lines

  1. main_debugoff
  2. main_sysinfooff
  3. main_reqinfooff
  4. main_endinfooff
  5. ;main_disabledos
  6. main_playeroff
  7. main_meteroff
  8.  
  9. macro_sync:    MACRO    ; Kills: d7 --            Macro_Sync
  10.     IFND    main_meteroff
  11.         movem.l    d0-a0,-(a7)
  12.         move.l    main_dataptr,a0
  13.         move.l    44(a0),a0
  14.         jsr    (a0)
  15.         move.l    main_dataptr,a0
  16.         move.l    d0,48(a0)
  17.     ENDIF
  18. .waitsync\@:    move.l    $dff004,d7
  19.         and.l    #$1ff00,d7
  20.         cmp.l    #305*$100,d7
  21.         bne.s    .waitsync\@
  22.     IFND    main_meteroff
  23.         move.l    main_dataptr,a0
  24.         move.l    40(a0),a0
  25.         jsr    (a0)
  26.         movem.l    (a7)+,d0-a0
  27.     ENDIF
  28.     ENDM
  29.  
  30. ;        include    "demo:System/Main_V3.82.S"
  31.  
  32. mnu_start:
  33.         
  34.         bsr.w    mnu_copycredz
  35.         bsr.w    mnu_setscreen
  36.         move.l    a7,mnu_mainstack
  37.         bsr.w    mnu_viewcredz
  38. mnu_loop:    lea    mnu_mainmenu,a0
  39.         bsr.w    mnu_domenu
  40.  
  41.         lea    mnu_quitmenu,a0
  42.         bsr.w    mnu_domenu
  43.         bra.w    mnu_loop
  44.  
  45. ;        bsr.w    mnu_getrawvalue
  46. ;        move.l    d0,test
  47.  
  48. mnu_exit:    bsr.w    mnu_clearscreen
  49.         rts
  50.  
  51. mnu_saveframe:    lea    mnu_frame,a0
  52.         lea    mnu_savedcredz,a1
  53.         move.l    #10*256*3-1,d0
  54. .loop:        move.l    (a0)+,(a1)+
  55.         dbra    d0,.loop        
  56.         lea    mnu_frame+40*32+4,a0
  57.         moveq.l    #8,d3
  58.         moveq.l    #0,d0
  59.         move.w    #191,d1
  60. .loop1:        moveq.l    #7,d2
  61. .loop2:        move.l    d0,(a0)+
  62.         move.l    d0,40*256-4(a0)
  63.         move.l    d0,40*2*256-4(a0)
  64.         dbra    d2,.loop2
  65.         add.l    d3,a0
  66.         dbra    d1,.loop1
  67.         rts
  68.  
  69. mnu_viewcredz:    clr.l    counter
  70.         bsr.w    mnu_copycredz
  71. .w8key:        jsr    key_readkey
  72.         cmp.l    #50*10,counter
  73.         beq.s    .exit
  74.         tst.w    d0
  75.         beq.s    .w8key
  76. .exit:        rts
  77.  
  78. mnu_copycredz:    lea    mnu_savedcredz,a0
  79.         lea    mnu_morescreen+40*256*3,a1
  80.         move.w    #10*256-1,d0
  81. .loop:        move.l    (a0)+,(a1)+
  82.         move.l    40*256-4(a0),40*256-4(a1)
  83.         move.l    2*40*256-4(a0),2*40*256-4(a1)
  84.         dbra    d0,.loop        
  85.         rts
  86.         
  87.         
  88.         
  89. mnu_clearscreen:bsr.w    mnu_fadeout
  90.  
  91.         clr.l    main_vblint
  92.         
  93.         
  94. .loop1:        tst.w    mnu_bltbusy
  95.         bne.s    .loop1
  96. ;        bsr.w    key_kbdexit
  97.         clr.l    main_bltint
  98.         macro_sync
  99.         move.w    #$7de0,$dff096
  100.         rts
  101.  
  102. mnu_setscreen:    bsr.w    mnu_init
  103.         macro_sync
  104.         move.w    #$7de0,$dff096
  105.         move.w    #$8200!%110000000,$dff096
  106.         move.l    #mnu_copper,$dff080
  107.         move.w    #0,$dff088
  108. ;        bsr.w    key_kbdinit
  109.         move.l    #mnu_vblint,main_vblint        
  110.         bsr.w    mnu_fadein
  111.         rts
  112.  
  113. mnu_vblint:    bsr.w    mnu_movescreen
  114.         bsr.w    mnu_dofire
  115. ;        bsr.w    key_kbdlevel3
  116.         bsr.w    mnu_animcursor
  117.         bsr.w    mnu_plot
  118.         rts
  119.  
  120.  
  121.  
  122. mnu_init:    bsr.w    mnu_initrnd        ; Uses palette buffer
  123.         bsr.w    mnu_createpalette
  124.         tst.w    .cp
  125.         bne.s    .skipfs
  126.         lea    mnu_screen,a0
  127.         lea    mnu_screen+40*256,a1
  128.         lea    mnu_screen+40*256*2,a2
  129.         lea    mnu_screen+40*256*3,a3
  130.         move.w    #40*256/4-1,d1
  131. .fsloop:    move.l    (a1),d0
  132.         move.l    d0,(a2)+
  133.         move.l    d0,(a3)+
  134.         move.l    (a0)+,(a1)+
  135.         dbra    d1,.fsloop
  136. .skipfs:    st.b    .cp
  137. ;-------------------------------------------------------------- Clear screen --
  138.         lea    mnu_morescreen,a0
  139.         move.l    #40*256*3/16-1,d0
  140.         moveq.l    #0,d1
  141. .clrloop:    
  142.         REPT    4
  143.         move.l    d1,(a0)+
  144.         ENDR
  145.         dbra    d0,.clrloop                
  146.         bsr.w    mnu_cls
  147. ;--------------------------------------------------------------- Set bplptrs --
  148.         lea    mnu_bplptrs+2,a0
  149.         move.l    #mnu_screen,d0
  150.         moveq.l    #0,d1
  151.         bsr.w    .setbplptrs
  152.         move.l    #mnu_screen+40*256*2,d0
  153.         moveq.l    #0,d1
  154.         bsr.w    .setbplptrs
  155.         move.l    #mnu_morescreen,d0
  156.         moveq.l    #5,d1
  157.         bsr.s    .setbplptrs
  158. ;-------------------------------------------------------------- Init palette --
  159.         lea    mnu_palette,a2
  160.         moveq.l    #7,d0            ; #of banks-1
  161.         move.l    #$01060000,d6
  162.         move.l    #$01060200,d7
  163.         lea    mnu_colptrs,a0
  164.         lea    mnu_colptrs+33*4,a1
  165. .bankloop:    moveq.l    #31,d1            ; d1=#of colour/bank
  166.         move.l    d6,(a0)+
  167.         move.l    d7,(a1)+
  168.         move.w    #$0180,d5
  169. .colloop:    ;move.l    (a2)+,d2
  170.         clr.l    d2
  171.         move.l    d2,d3
  172.         and.l    #$f0f0f0,d2
  173.         lsr.l    #4,d2            ; x0x0x
  174.         lsl.b    #4,d2            ; x0xx0
  175.         lsl.w    #4,d2            ; xxx00
  176.         lsr.l    #8,d2            ; 00xxx
  177.         and.l    #$f0f0f,d3
  178.         lsl.b    #4,d3            ; x0xx0
  179.         lsl.w    #4,d3            ; xxx00
  180.         lsr.l    #8,d3            ; 00xxx
  181.         move.w    d5,(a0)+
  182.         move.w    d2,(a0)+
  183.         move.w    d5,(a1)+
  184.         move.w    d3,(a1)+
  185.         addq.w    #2,d5
  186.         dbra    d1,.colloop
  187.         add.l    #33*4,a0
  188.         add.l    #33*4,a1
  189.         add.l    #$2000,d6
  190.         add.l    #$2000,d7
  191.         dbra    d0,.bankloop
  192.         move.l    #-2,(a0)
  193.         rts
  194. .setbplptrs:    swap.w    d0
  195.         move.w    d0,(a0)
  196.         swap.w    d0
  197.         move.w    d0,4(a0)
  198.         addq.l    #8,a0
  199.         add.l    #40*256,d0
  200.         dbra    d1,.setbplptrs
  201.         rts
  202. .cp:        dc.w    0        
  203.  
  204. mnu_initrnd:    lea    mnu_palette+256,a1
  205.         move.w    #255,d0
  206. .parityloop:    move.b    d0,d1
  207.         and.w    #$1,d1
  208.         move.b    d0,d2
  209.         lsr.w    #2,d2
  210.         and.w    #$1,d2
  211.         eor.w    d2,d1
  212.         move.b    d0,d2
  213.         lsr.w    #3,d2
  214.         and.w    #$1,d2
  215.         eor.w    d2,d1
  216.         move.b    d0,d2
  217.         lsr.w    #5,d2
  218.         and.w    #$1,d2
  219.         eor.w    d2,d1
  220.         move.b    d1,-(a1)
  221.         dbra    d0,.parityloop
  222.         move.l    a1,a4            ; a4=Parity buffer
  223.         move.l    #'TBL!',d3        ; Random seed
  224.         lea    mnu_morescreen+6*40*256,a0
  225.         move.w    #40*256+8192-1,d0
  226. .loop:        moveq.l    #0,d1        ; d1=0
  227.         move.l    d3,d2        ; d2=Random seed
  228.         move.b    d2,d1        
  229.         and.b    #$fe,d2
  230.         move.b    (a4,d1.l),d1
  231.         or.b    d1,d2
  232.         ror.w    #1,d2
  233.         swap.w    d2
  234.         move.b    d2,d1        
  235.         and.b    #$fe,d2
  236.         move.b    (a4,d1.l),d1
  237.         or.b    d1,d2
  238.         ror.w    #1,d2
  239.         move.l    d2,d3
  240.         move.w    d2,d1
  241.         lsr.w    #8,d1
  242.         or.w    d1,d2
  243.         move.l    d2,d1
  244.         swap.w    d1
  245.         or.w    d1,d2
  246.         move.b    d2,(a0)+
  247.         dbra    d0,.loop
  248.         rts
  249.  
  250. mnu_movescreen:    move.w    mnu_screenpos,d0
  251.         and.w    #$ff,d0
  252.         mulu    #40,d0
  253.         add.l    #mnu_screen,d0
  254.         lea    mnu_bplptrs+2,a0
  255.         moveq.l    #1,d1
  256. .loop:        swap.w    d0
  257.         move.w    d0,(a0)
  258.         swap.w    d0
  259.         move.w    d0,4(a0)
  260.         addq.l    #8,a0
  261.         add.l    #40*256*2,d0
  262.         dbra    d1,.loop
  263.         subq.w    #1,mnu_screenpos
  264.         rts
  265.  
  266. mnu_createpalette:
  267.         lea    mnu_backpal,a0
  268.         lea    mnu_firepal,a1
  269.         lea    mnu_fontpal,a2
  270.         lea    mnu_palette+256*4,a3
  271.         move.w    #255,d0
  272. .loop:        move.w    d0,d1
  273.         and.w    #$e0,d1        
  274.         beq.s    .next
  275.         lsr.w    #5,d1
  276.         move.l    (a2,d1.w*4),-(a3)
  277.         bra.s    .cont
  278. .next:        move.w    d0,d1
  279.         and.w    #$1c,d1    
  280.         beq.s    .next1
  281.         lsr.w    #2,d1
  282.         move.l    (a1,d1.w*4),-(a3)
  283.         bra.s    .cont
  284. .next1:        move.w    d0,d1
  285.         and.w    #$3,d1
  286.         move.l    (a0,d1.w*4),-(a3)
  287. .cont:        dbra    d0,.loop
  288.         rts    
  289.  
  290.  
  291. mnu_fadespeed    =    16
  292.  
  293. mnu_fadein:    clr.w    mnu_fadefactor
  294.         moveq.l    #256/mnu_fadespeed-1,d0
  295. .loop:        move.l    d0,-(a7)
  296. .wsync:        cmp.b    #$80,$dff006
  297.         blt.s    .wsync
  298.         cmp.b    #$90,$dff006
  299.         bgt.s    .wsync
  300.         bsr.w    mnu_fade
  301. .wsync2:    cmp.b    #$a0,$dff006
  302.         blt.s    .wsync2
  303.         add.w    #mnu_fadespeed,mnu_fadefactor
  304.         move.l    (a7)+,d0
  305.         dbra    d0,.loop
  306.         move.w    #255,mnu_fadefactor
  307. .wsync3:    cmp.b    #$80,$dff006
  308.         blt.s    .wsync3
  309.         cmp.b    #$90,$dff006
  310.         bgt.s    .wsync3
  311.         bsr.w    mnu_fade
  312.         rts
  313.  
  314. mnu_fadeout:    move.w    #255,mnu_fadefactor
  315.         moveq.l    #256/mnu_fadespeed-1,d0
  316. .loop:        move.l    d0,-(a7)
  317.         bsr.w    mnu_docursor
  318. .wsync:        cmp.b    #$80,$dff006
  319.         blt.s    .wsync
  320.         cmp.b    #$90,$dff006
  321.         bgt.s    .wsync
  322.         bsr.w    mnu_fade
  323. .wsync2:    cmp.b    #$a0,$dff006
  324.         blt.s    .wsync2
  325.         sub.w    #mnu_fadespeed,mnu_fadefactor
  326.         move.l    (a7)+,d0
  327.         dbra    d0,.loop
  328.         clr.w    mnu_fadefactor
  329. .wsync3:    cmp.b    #$80,$dff006
  330.         blt.s    .wsync3
  331.         cmp.b    #$90,$dff006
  332.         bgt.s    .wsync3
  333.         bsr.w    mnu_fade
  334.         rts
  335.  
  336. mnu_fadefactor:    dc.w    0
  337.  
  338. mnu_fade:    lea    mnu_palette,a2
  339.         moveq.l    #7,d0
  340.         lea    mnu_colptrs+2,a0
  341.         lea    mnu_colptrs+2+33*4,a1
  342.         move.w    mnu_fadefactor,d7
  343.         move.l    #$f0f0f0,d5
  344.         move.l    #$ff,d6
  345. .bankloop:    moveq.l    #31,d1
  346.         addq.l    #4,a0
  347.         addq.l    #4,a1
  348. .colloop:    moveq.l    #0,d4
  349.         move.l    (a2)+,d2
  350.  
  351.     REPT    2
  352.         move.l    d2,d3
  353.         and.w    d6,d3
  354.         mulu    d7,d3
  355.         divu    d6,d3
  356.         move.b    d3,d4
  357.         ror.l    #8,d4
  358.         ror.l    #8,d2
  359.     ENDR
  360.         move.l    d2,d3
  361.         and.w    d6,d3
  362.         mulu    d7,d3
  363.         divu    d6,d3
  364.         move.b    d3,d4
  365.         ror.l    #8,d4
  366.         ror.l    #8,d4
  367.         move.l    d4,d3
  368.         and.l    d5,d3
  369.         lsr.l    #4,d3            ; x0x0x
  370.         lsl.b    #4,d3            ; x0xx0
  371.         lsl.w    #4,d3            ; xxx00
  372.         lsr.l    #8,d3            ; 00xxx
  373.         and.l    #$f0f0f,d4
  374.         move.w    d3,(a0)
  375.         lsl.b    #4,d4            ; x0xx0
  376.         lsl.w    #4,d4            ; xxx00
  377.         lsr.l    #8,d4            ; 00xxx
  378.         addq.l    #4,a0
  379.         move.w    d4,(a1)
  380.         addq.l    #4,a1
  381.         dbra    d1,.colloop
  382.         add.l    #33*4,a0
  383.         add.l    #33*4,a1
  384.         dbra    d0,.bankloop
  385.         rts
  386.  
  387.  
  388.  
  389.  
  390. mnu_printxy:;in:a0,d0,d1=Text ptr,XPos,YPos    (XPos in words YPos in pixels)
  391.         lea    mnu_font,a3
  392.         lea    mnu_font+176*40,a4
  393.         lea    mnu_font+176*40*2,a5
  394.         moveq.l    #40,d7
  395.         moveq.l    #20,d6
  396.         move.l    #40*16,d5
  397.         mulu    d7,d1
  398.         add.w    d0,d1
  399.         add.l    #mnu_morescreen+40*256*3,d1
  400.         move.l    d1,a1            ; a1=Ptr
  401.         move.l    a1,a2
  402. .loop:        move.b    (a0)+,d2
  403.         beq.s    .exit
  404.         move.l    mnu_printdelay,timer
  405. .w8a:        tst.l    timer
  406.         bne.s    .w8a
  407.         and.l    #$ff,d2
  408.         sub.w    #32,d2
  409.         bge.s    .ok
  410.         move.l    a2,a1
  411.         add.l    #20*40,a1
  412.         move.l    a1,a2
  413.         bra.s    .loop
  414. .ok:        divu    d6,d2
  415.         move.w    d2,d3        ; d3=Y
  416.         swap.w    d2        ; d2=X
  417.         mulu    d5,d3        ; d3=Y Addy
  418.         lsl.w    #1,d2
  419.         add.w    d2,d3        ; d3=Addy Offset
  420.         move.l    a1,a6
  421.         moveq.l    #15,d2
  422. .yloop:        move.w    (a3,d3.l),(a6)
  423.         move.w    (a4,d3.l),40*256(a6)
  424.         move.w    (a5,d3.l),40*256*2(a6)
  425.         add.l    d7,d3
  426.         add.l    d7,a6
  427.         dbra    d2,.yloop
  428.         addq.l    #2,a1
  429.         bra.s    .loop
  430. .exit:        rts
  431.  
  432. mnu_dofire:    btst.b    #0,main_counter+3
  433.         beq.s    .skip
  434.         rts
  435. .skip:        move.l    #mnu_bltint,main_bltint
  436.         move.w    $dff006,d0
  437.         add.w    d0,mnu_rnd
  438.         tst.b    $dff002
  439. .w8:        tst.w    mnu_bltbusy
  440.         bne.s    .w8
  441.         btst.b    #6,$dff002
  442.         bne.s    .w8
  443.         lea    mnu_sourceptrs,a0
  444.         move.l    (a0),d0
  445.         move.l    4(a0),(a0)
  446.         move.l    8(a0),4(a0)
  447.         move.l    d0,8(a0)
  448.         lea    $dff000,a6
  449.         st.b    mnu_bltbusy
  450.         move.w    #$0040,$9c(a6)            ; Clear BLT req
  451.         move.w    #$8040,$9a(a6)            ; Enable BLT int
  452.         move.w    #$8200!%1000000,$96(a6)        ; Enable blitter dma
  453.         bsr.w    mnu_bltint
  454.         rts
  455.  
  456. mnu_bltint:    bsr.w    .getrnd
  457.         lea    $dff000,a6
  458.         move.l    .passptr,a0
  459.         move.l    (a0),d0
  460.         beq.s    .last
  461.         addq.l    #4,.passptr
  462.         move.l    d0,a0
  463.         jmp    (a0)
  464. .last:        move.w    #$0040,$9a(a6)            ; Disable BLT int
  465.         move.w    #%1000000,$96(a6)        ; Disable blitter dma
  466.         move.l    #.passlist,.passptr
  467.         clr.w    mnu_bltbusy
  468.         rts
  469. .getrnd:    moveq.l    #0,d0
  470.         move.w    mnu_rnd,d0
  471.         and.l    #8190,d0
  472.         add.l    #mnu_morescreen+6*40*256,d0
  473.         move.l    d0,mnu_rndptr
  474.         addq.w    #5,mnu_rnd
  475.         rts
  476. .rnd:        dc.w    0
  477. .passptr:    dc.l    .passlist
  478. .passlist:    dc.l    mnu_pass1
  479.         dc.l    mnu_pass2
  480.         dc.l    mnu_pass3
  481.         dc.l    0
  482.  
  483. mnu_rnd:    dc.w    0
  484. mnu_bltbusy:    dc.w    0
  485.  
  486. mnu_speed    =    1
  487. mnu_size    =    256
  488.  
  489. mnu_subtract:    dc.l    0
  490. mnu_count:    dc.w    0
  491.  
  492. mnu_pass1:    clr.l    mnu_subtract
  493.         move.w    mnu_count,d0
  494.         addq.w    #1,mnu_count
  495.         and.w    #$3,d0
  496.         beq.s    .l1
  497.         cmp.w    #1,d0
  498.         bne.s    .normal
  499.         move.l    #-2,mnu_subtract
  500.         move.l    #$fff80000,$40(a6)        ; D=A+BC
  501.         bra.s    .cont
  502. .l1:        move.l    #$1ff80000,$40(a6)        ; D=A+BC
  503.         bra.s    .cont
  504. .normal:    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  505. .cont:        move.l    #$ffffffff,$44(a6)        ; Masks A
  506.         move.l    #$00000000,$60(a6)        ; CB modulo
  507.         move.l    #$00000000,$64(a6)        ; AD modulo
  508.         move.l    #mnu_morescreen+mnu_speed*40,$48(a6) ; Source C
  509.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  510.         move.l    mnu_sourceptrs,d0
  511.         sub.l    mnu_subtract,d0
  512.         move.l    d0,$50(a6)            ; Source A
  513.         move.l    #mnu_morescreen,$54(a6)        ; Dest D
  514.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  515.         rts
  516.  
  517. mnu_pass2:;    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  518. ;        move.l    #$ffffffff,$44(a6)        ; Masks A
  519. ;        move.l    #$00000000,$60(a6)        ; CB modulo
  520. ;        move.l    #$00000000,$64(a6)        ; AD modulo
  521.         move.l    #mnu_morescreen+40*256+mnu_speed*40,$48(a6) ; Source C
  522.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  523.         move.l    mnu_sourceptrs+4,d0
  524.         sub.l    mnu_subtract,d0
  525.         move.l    d0,$50(a6)            ; Source A
  526.         move.l    #mnu_morescreen+40*256,$54(a6)        ; Dest D
  527.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  528.         rts
  529.  
  530.  
  531. mnu_pass3:;    move.l    #$0ff80000,$40(a6)        ; D=A+BC
  532. ;        move.l    #$ffffffff,$44(a6)        ; Masks A
  533. ;        move.l    #$00000000,$60(a6)        ; CB modulo
  534. ;        move.l    #$00000000,$64(a6)        ; AD modulo
  535.         move.l    #mnu_morescreen+40*256*2+mnu_speed*40,$48(a6) ; Source C
  536.         move.l    mnu_rndptr,$4c(a6)        ; Source B
  537.         move.l    mnu_sourceptrs+8,d0
  538.         sub.l    mnu_subtract,d0
  539.         move.l    d0,$50(a6)            ; Source A
  540.         move.l    #mnu_morescreen+40*256*2,$54(a6)        ; Dest D
  541.         move.w    #(mnu_size-mnu_speed)*64+20,$58(a6)    ; Size and trigger
  542.         rts
  543.         
  544. mnu_cls:    lea    mnu_frame+40*256*3,a0
  545.         lea    mnu_morescreen+40*256*6,a1
  546.         move.w    #40*256*3/16-1,d0
  547. .loop:        
  548.         REPT    4
  549.         move.l    -(a0),-(a1)
  550.         ENDR                
  551.         dbra    d0,.loop
  552.         rts
  553.  
  554. mnu_animcursor:    btst    #0,main_counter+3
  555.         beq.s    .skip
  556.         move.l    mnu_frameptr,a0
  557.         move.b    (a0),mnu_arrow
  558.         tst.b    1(a0)
  559.         beq.s    .skip
  560.         cmp.b    #40,1(a0)
  561.         bhi.s    .ok
  562.         moveq.l    #0,d0
  563.         move.b    1(a0),d0
  564.         sub.l    d0,mnu_frameptr
  565. .ok:        addq.l    #1,mnu_frameptr
  566. .skip:        rts
  567.  
  568. mnu_domenu:;in:    a0=Menu ptr
  569. ;        bsr.w    key_flushbuffer
  570. .redraw:    move.l    a0,-(a7)
  571.         bsr.w    mnu_openmenu        ; Open new menu
  572.         move.l    (a7)+,a0
  573. .loop:        movem.l    a0,-(a7)
  574.         bsr.w    mnu_update
  575.         movem.l    (a7)+,a0
  576.         move.l    a0,-(a7)
  577.         bsr.w    mnu_waitmenu        ; Wait for option
  578.         move.l    (a7)+,a0
  579.         moveq.l    #0,d2
  580.         move.w    mnu_row,d2
  581.         divu    14(a0),d2
  582.         swap.w    d2
  583.         move.w    d2,mnu_currentsel
  584.         tst.l    d1
  585.         beq.s    .ok
  586.         cmp.w    #42,d1
  587.         beq.w    .left
  588.         cmp.w    #41,d1
  589.         beq.w    .right
  590. .ok:        cmp.w    #-1,d0            ; Esc ???
  591.         beq.w    .exit            ; Yepp exit
  592.         move.l    16(a0,d0.w*8),d1    ; Get option type
  593.         tst.l    d1            ; 0=Do Nothing ???
  594.         beq.s    .loop        
  595.         cmp.l    #1,d1            ; 1=Sub menu
  596.         beq.w    .newmenu
  597.         cmp.l    #2,d1            ; 2=Exit sub
  598.         beq.w    .exit
  599.         cmp.l    #3,d1
  600.         beq.w    .bsr
  601.         cmp.l    #4,d1
  602.         beq.w    .left
  603.         cmp.l    #5,d1
  604.         beq.w    .leftsl
  605.         cmp.l    #6,d1
  606.         beq.w    .jump
  607.         cmp.l    #7,d1
  608.         beq.w    .changemenu
  609.         cmp.l    #8,d1
  610.         beq.w    .doraw
  611.         cmp.l    #9,d1
  612.         beq.w    .doload
  613.         cmp.l    #10,d1
  614.         beq.w    .dosave
  615. .wrong:        move.l    #mnu_errcursanim,mnu_frameptr
  616.         bra.w    .loop            ; Strange option ??? Loop
  617. .dosave:    movem.l    d0-a6,-(a7)
  618.         move.l    20(a0,d0.w*8),a0
  619.         move.w    mnu_currentlevel,(a0)
  620.         bsr.w    mnu_savelevel
  621.         movem.l    (a7)+,d0-a6
  622.     ;    bra.w    .loop
  623.     bra.w    .exit
  624. .doload:    movem.l    d0-a6,-(a7)
  625.         move.l    20(a0,d0.w*8),a0
  626.         move.w    (a0),mnu_currentlevel
  627.         bsr.w    mnu_loadlevel
  628.         movem.l    (a7)+,d0-a6
  629.     ;bra.w    .loop
  630.     bra.w    .exit
  631. .doraw:        movem.l    d0-a6,-(a7)
  632.         move.l    #mnu_buttonanim,mnu_frameptr
  633.         move.l    20(a0,d0.w*8),a0
  634. .rawloop:    move.l    a0,-(a7)
  635.         bsr.w    mnu_getrawvalue
  636.         move.l    (a7)+,a0
  637.         cmp.w    (a0),d0
  638.         beq.s    .rawcont
  639.         cmp.w    #69,d0
  640.         beq.s    .rawcont
  641.         lea    mnu_rawkeys,a1
  642. .tstraw:    move.w    (a1)+,d1
  643.         cmp.w    #$ffff,d1
  644.         beq.s    .rawok
  645.         cmp.w    d0,d1
  646.         bne.s    .tstraw
  647.         move.l    #mnu_errbutanim,mnu_frameptr
  648.         bra.s    .rawloop
  649. .rawok:        move.w    d0,(a0)
  650. .rawcont:    move.l    #mnu_cursanim,mnu_frameptr
  651.         movem.l    (a7)+,d0-a6
  652.         bra.w    .loop
  653. .bsr:        movem.l    d0-a6,-(a7)
  654.         move.l    20(a0,d0.w*8),a0
  655.         jsr    (a0)
  656.         movem.l    (a7)+,d0-a6
  657.         bra.w    .redraw
  658. .jump:        move.l    20(a0,d0.w*8),a0
  659.         move.l    mnu_mainstack,a7
  660.         jmp    (a0)
  661. ;---------------------------------------------------------------------------
  662. .left:        move.l    16(a0,d0.w*8),d1
  663.         cmp.l    #4,d1
  664.         bne.s    .leftsl        
  665.         move.l    20(a0,d0.w*8),a1
  666.         move.l    10(a1),a2
  667.         move.w    8(a1),d0
  668.         add.w    d0,(a2)
  669.         bra.w    .loop
  670. .leftsl:    cmp.l    #5,d1
  671.         bne.w    .wrong
  672.         move.l    20(a0,d0.w*8),a1
  673.         move.l    6(a1),a2
  674.         addq.w    #1,(a2)
  675.         bra.w    .loop        
  676. .right:        move.l    16(a0,d0.w*8),d1
  677.         cmp.l    #4,d1
  678.         bne.s    .rightsl        
  679.         move.l    20(a0,d0.w*8),a1
  680.         move.l    10(a1),a2
  681.         move.w    8(a1),d0
  682.         sub.w    d0,(a2)
  683.         bra.w    .loop
  684. .rightsl:    cmp.l    #5,d1
  685.         bne.w    .wrong
  686.         move.l    20(a0,d0.w*8),a1
  687.         move.l    6(a1),a2
  688.         subq.w    #1,(a2)
  689.         bra.w    .loop
  690. ;------------------------------------------------------------------ New menu --
  691. .changemenu:    move.l    20(a0,d0.w*8),a0
  692.         bra.w    .redraw
  693. .newmenu:    move.l    a0,-(a7)
  694.         move.l    20(a0,d0.w*8),a0    ; Set new menu
  695.         bsr.w    mnu_domenu
  696.         move.l    (a7)+,a0
  697.         bra.w    .redraw
  698. .exit:        rts
  699.  
  700. mnu_openmenu:;in:a0=Ptr to menu
  701. ;        bsr.w    key_flushbuffer
  702.         move.w    mnu_currentlevel,d0
  703.         add.w    #65,d0
  704.         move.b    d0,mnu_mainleveltext
  705.         move.l    a0,-(a7)
  706.         move.l    #0,mnu_printdelay
  707.         bsr.w    mnu_cls
  708.         move.l    #35,timer
  709. .w8a:        tst.l    timer
  710.         bne.s    .w8a        
  711.         move.l    (a7)+,a0
  712.         move.l    a0,-(a7)
  713.         move.w    (a0),d0
  714.         move.w    2(a0),d1
  715.         move.l    4(a0),a0
  716.         bsr.w    mnu_printxy
  717.         move.l    (a7)+,a0
  718.         move.w    8(a0),mnu_curx
  719.         move.w    10(a0),mnu_cury
  720.         move.w    12(a0),mnu_spread
  721.         move.w    14(a0),mnu_items
  722.         move.w    14(a0),d0
  723.         mulu    #3000,d0
  724.         move.w    d0,mnu_row
  725.         move.w    d0,mnu_oldrow
  726.         bsr.w    mnu_update
  727.         rts
  728.  
  729. mnu_waitmenu:;out:    d0=Selection number
  730. ;        move.l    #mnu_cursanim,mnu_frameptr
  731.         clr.l    mnu_printdelay
  732.  
  733. .loop:        moveq.l    #0,d1
  734.         move.w    mnu_oldrow,d1
  735.         cmp.w    mnu_row,d1
  736.         beq.s    .skip
  737. ;        move.l    #mnu_cursanim,mnu_frameptr
  738.         divu    mnu_items,d1
  739.         swap.w    d1
  740.         mulu    mnu_spread,d1
  741.         add.w    mnu_cury,d1
  742.         move.w    mnu_curx,d0
  743.         lea    mnu_cleararrow,a0
  744.         bsr.w    mnu_printxy
  745. .skip:
  746.  
  747. .w8key:        bsr.w    mnu_docursor
  748.         jsr    key_readkey
  749.         tst.w    d0
  750.         beq.s    .w8key
  751.         cmp.b    #27,d0
  752.         beq.s    .exit
  753.         cmp.b    #129,d0        ; Down Arrow
  754.         beq.s    .down
  755.         cmp.b    #128,d0
  756.         beq.s    .up
  757.         cmp.b    #13,d0
  758.         beq.s    .quit
  759.         cmp.b    #32,d0
  760.         beq.s    .quit
  761.         cmp.b    #130,d0
  762.         beq.s    .sliderr
  763.         cmp.b    #131,d0
  764.         beq.s    .sliderl
  765.         move.l    #mnu_errcursanim,mnu_frameptr
  766.         bra.w    .loop
  767. .exit:        moveq.l    #-1,d0        ; Esc key
  768.         moveq.l    #0,d1
  769.         rts
  770. .sliderr:    moveq.l    #41,d1
  771.         bra.s    .cpcont
  772. .sliderl:    moveq.l    #42,d1
  773.         bra.s    .cpcont
  774. .quit:        moveq.l    #0,d1
  775. .cpcont:    move.w    mnu_row,d0
  776.         divu    mnu_items,d0
  777.         swap.w    d0
  778.         and.l    #$ffff,d0
  779.         rts
  780. .down:        addq.w    #1,mnu_row
  781.         bra.w    .loop
  782. .up:        subq.w    #1,mnu_row
  783.         bra.w    .loop
  784.  
  785. mnu_docursor:    moveq.l    #0,d1
  786.         move.w    mnu_row,d1
  787.         move.w    d1,mnu_oldrow
  788.         divu    mnu_items,d1
  789.         swap.w    d1
  790.         mulu    mnu_spread,d1
  791.         add.w    mnu_cury,d1
  792.         move.w    mnu_curx,d0
  793.         lea    mnu_arrow,a0
  794.         bsr.w    mnu_printxy
  795.         rts
  796.  
  797. mnu_docursor1:    moveq.l    #0,d1
  798.         move.w    mnu_row,d1
  799.         divu    mnu_items,d1
  800.         swap.w    d1
  801.         mulu    mnu_spread,d1
  802.         add.w    mnu_cury,d1
  803.         move.w    mnu_curx,d0
  804.         lea    mnu_arrow,a0
  805.         bsr.w    mnu_printxy
  806.         rts
  807.  
  808. mnu_update:;in: a0=Ptr to menu
  809.         move.w    14(a0),d7
  810.         subq.w    #1,d7
  811.         move.w    10(a0),d1        ; d1=YPos
  812.         move.w    8(a0),d0
  813.         move.l    a0,a1
  814.         add.l    #16,a1
  815. .itemloop:    move.l    (a1)+,d2
  816.         cmp.l    #4,d2            ; Slider ?
  817.         beq.s    .doslider
  818.         cmp.l    #5,d2            ; Slider ?
  819.         beq.s    .docycler
  820.         cmp.l    #8,d2
  821.         beq.s    .dorawkey
  822.         cmp.l    #9,d2
  823.         beq.s    .doloadlevel
  824.         cmp.l    #10,d2
  825.         beq.s    .doloadlevel
  826. .continue:    add.w    12(a0),d1
  827.         addq.l    #4,a1
  828.         dbra    d7,.itemloop
  829.         rts
  830. .doslider:    movem.l    d0-a6,-(a7)
  831.         move.l    (a1),a0            ; a0=Slider ptr
  832.         bsr.w    mnu_putslider    
  833.         movem.l    (a7)+,d0-a6
  834.         bra.s    .continue        
  835. .docycler:    movem.l    d0-a6,-(a7)
  836.         move.l    (a1),a0            ; a0=Cycler ptr
  837.         bsr.w    mnu_putcycler    
  838.         movem.l    (a7)+,d0-a6
  839.         bra.s    .continue
  840. .dorawkey:    movem.l    d0-a6,-(a7)
  841.         move.l    (a1),a0            ; a0=Ptr to value
  842.         move.w    (a0),d3
  843.         add.w    #132,d3
  844.         add.w    #2,d0
  845.         move.b    d3,mnu_rawprint
  846.         lea    mnu_rawprint,a0
  847.         bsr.w    mnu_printxy
  848.         movem.l    (a7)+,d0-a6
  849.         bra.s    .continue
  850. .doloadlevel:    movem.l    d0-a6,-(a7)
  851.         move.l    (a1),a0
  852.         move.w    (a0),d2            ; d0=Level no
  853.         add.w    #65,d2
  854.         move.b    d2,mnu_levelno
  855.         addq.w    #2,d0
  856.         lea    mnu_leveltext,a0
  857.         bsr.w    mnu_printxy
  858.         movem.l    (a7)+,d0-a6
  859.         bra.s    .continue
  860.  
  861. mnu_putslider:;in:    d0,d1,d7,a0=Xpos,Ypos,Spread,Slider ptr
  862.         add.w    (a0),d0
  863.         add.w    2(a0),d1
  864.         move.w    d0,.xpos
  865.         movem.l    d0-d1/a0,-(a7)
  866.         lea    mnu_leftslider,a0
  867.         bsr.w    mnu_printxy
  868.         movem.l    (a7)+,d0-d1/a0
  869.         addq.w    #2,d0
  870.         move.w    6(a0),d2
  871.         lsr.w    #4,d2
  872.         tst.w    d2
  873.         beq.s    .skip
  874.         move.w    d2,d4
  875.         movem.l    d0-d1/a0,-(a7)
  876.         lea    mnu_sliderspace,a0
  877.         move.l    a0,a1
  878.         subq.w    #1,d2
  879. .loop:        move.b    #59,(a1)+
  880.         dbra    d2,.loop
  881.         clr.b    (a1)
  882.         bsr.w    mnu_printxy
  883.         movem.l    (a7)+,d0-d1/a0
  884.         add.w    d4,d0
  885.         add.w    d4,d0
  886. .skip:        move.w    6(a0),d2
  887.         and.w    #$f,d2
  888.         beq.w    .skip2
  889.         move.w    d2,d5
  890.         subq.w    #1,d2
  891.         moveq.l    #0,d3
  892. .loop1:        ror.w    #1,d3
  893.         or.w    #$8000,d3
  894.         dbra    d2,.loop1
  895.         movem.l    d0-d1,-(a7)
  896.         mulu    d7,d1
  897.         add.w    d0,d1
  898.         add.l    #mnu_morescreen+40*256*3,d1
  899.         move.l    d1,a4            ; a4=Screen Ptr
  900.         movem.l    (a7)+,d0-d1
  901.         swap.w    d3
  902.         clr.w    d3
  903.         moveq.l    #15,d2
  904.         move.l    a4,a5
  905.         move.l    mnu_sliddat,a3
  906. .loop2:        move.l    (a3),d4
  907.         and.l    d3,d4
  908.         move.l    d4,(a4)
  909.         move.l    176*40(a3),d4
  910.         and.l    d3,d4
  911.         move.l    d4,40*256(a4)
  912.         move.l    176*40*2(a3),d4
  913.         and.l    d3,d4
  914.         move.l    d4,40*256*2(a4)
  915.         add.l    #40,a3
  916.         add.l    #40,a4
  917.         dbra    d2,.loop2
  918.         move.l    a5,a4
  919.         moveq.l    #15,d2
  920.         move.l    mnu_sliddat,a3
  921. .loop3:        move.l    2(a3),d4
  922.         lsr.l    d5,d4
  923.         or.l    d4,(a4)
  924.         move.l    2+176*40(a3),d4
  925.         lsr.l    d5,d4
  926.         or.l    d4,40*256(a4)
  927.         move.l    2+176*40*2(a3),d4
  928.         lsr.l    d5,d4
  929.         or.l    d4,40*256*2(a4)
  930.         add.l    #40,a3
  931.         add.l    #40,a4
  932.         dbra    d2,.loop3
  933.         bra.s    .cont1
  934. .skip2:        movem.l    d0/d1/a0,-(a7)
  935.         lea    mnu_rightslider,a0
  936.         bsr.w    mnu_printxy
  937.         movem.l    (a7)+,d0/d1/a0
  938. .cont1:        move.l    10(a0),a1        ; Value 2 change ptr
  939.         move.w    (a1),d0
  940.         cmp.w    #0,d0
  941.         bge.s    .ok1
  942.         moveq.l    #0,d0
  943. .ok1:        cmp.w    4(a0),d0
  944.         ble.s    .ok2
  945.         move.w    4(a0),d0
  946. .ok2:        move.w    d0,(a1)
  947.         mulu    6(a0),d0
  948.         divu    4(a0),d0        ; d0=Slider position X
  949.         sub.w    mnu_sliderwidth,d0
  950.         move.w    .xpos,d2
  951.         lsl.w    #3,d2
  952.         add.w    d2,d0
  953.         move.w    d0,d2
  954.         and.l    #$f,d2
  955.         lsr.w    #4,d0
  956.         lsl.w    #1,d0
  957.         addq.w    #2,d0
  958.         and.l    #$ffff,d0
  959.         mulu    d7,d1
  960.         add.l    d0,d1
  961.         add.l    #mnu_morescreen+40*256*3,d1
  962.         move.l    d1,a4            ; a1=Screen ptr
  963.         moveq.l    #15,d3
  964.         move.l    mnu_sliddat,a3
  965. .loop4:        move.l    6(a3),d4
  966.         lsr.l    d2,d4
  967.         or.l    d4,(a4)
  968.         move.l    6+176*40(a3),d4
  969.         lsr.l    d2,d4
  970.         or.l    d4,40*256(a4)
  971.         move.l    6+176*40*2(a3),d4
  972.         lsr.l    d2,d4
  973.         or.l    d4,40*256*2(a4)
  974.         add.l    #40,a3
  975.         add.l    #40,a4
  976.         dbra    d3,.loop4
  977.         rts
  978. .xpos:        dc.w    0
  979.  
  980. mnu_putcycler:;in:    d0,d1,a0=Xpos,Ypos,Spread,Cycler ptr
  981.         add.w    (a0),d0
  982.         add.w    2(a0),d1
  983.         move.l    6(a0),a1
  984.         moveq.l    #0,d2
  985.         move.w    (a1),d2
  986.         divu    4(a0),d2
  987.         swap.w    d2
  988.         move.w    d2,(a1)
  989.         move.l    10(a0,d2.w*4),a0
  990.         bsr.w    mnu_printxy
  991.         rts
  992.  
  993. mnu_plot:    lea    mnu_sines,a0
  994.         move.w    mnu_xsine0,d0
  995.         and.w    #1022,d0
  996.         move.w    (a0,d0.w),d1
  997.         move.w    mnu_xsine1,d0
  998.         and.w    #1022,d0
  999.         add.w    (a0,d0.w),d1
  1000.         asr.w    #4,d1
  1001.         add.w    #160,d1
  1002.         move.w    mnu_ysine0,d0
  1003.         and.w    #1022,d0
  1004.         move.w    (a0,d0.w),d2
  1005.         move.w    mnu_ysine1,d0
  1006.         and.w    #1022,d0
  1007.         add.w    (a0,d0.w),d2
  1008.         asr.w    #4,d2
  1009.         add.w    #128,d2
  1010.         mulu    #40,d2
  1011.         move.w    d1,d0
  1012.         lsr.w    #3,d1
  1013.         add.w    d1,d2
  1014.         neg.w    d0
  1015.         addq.w    #$7,d0
  1016.         add.l    #mnu_morescreen,d2
  1017.         move.l    d2,a0
  1018.         bset.b    d0,(a0)
  1019.         bset.b    d0,40*256(a0)
  1020.         bset.b    d0,40*256*2(a0)
  1021.         addq.w    #3,mnu_xsine0
  1022.         subq.w    #4,mnu_xsine1
  1023.         addq.w    #5,mnu_ysine0
  1024.         subq.w    #2,mnu_ysine1
  1025.         rts
  1026.  
  1027. mnu_getrawvalue:;out:    d0=Raw value
  1028.  
  1029.     bsr.w mnu_docursor1
  1030.         move.b lastpressed,d0
  1031.         beq.s mnu_getrawvalue
  1032.         move.b #0,lastpressed
  1033.         move.w #$ffff,mnu_oldrow
  1034.         rts
  1035.  
  1036.         ; Waits until a key is pressed the returns the raw value
  1037. ;        bsr.w    mnu_docursor1
  1038. ;        tst.b    key_keypressed
  1039. ;        bne.s    mnu_getrawvalue
  1040. ;.loop:        bsr.w    mnu_docursor1
  1041. ;        tst.b    key_keypressed
  1042. ;        beq.s    .loop
  1043. ;        move.b    key_rawkey,d0
  1044. ;        and.l    #$ff,d0
  1045. ;        move.l    d0,-(a7)
  1046. ;.oloop:        bsr.w    mnu_docursor1
  1047. ;        tst.b    key_keypressed
  1048. ;        bne.s    .oloop
  1049. ;        bsr.w    key_flushbuffer
  1050. ;        move.w    #$ffff,mnu_oldrow
  1051. ;        move.l    (a7)+,d0
  1052. ;        rts
  1053.  
  1054. mnu_test4quit:    clr.w    mnu_quitflag
  1055.         bsr.w    mnu_docursor
  1056.         jsr    key_readkey
  1057.         cmp.w    #27,d0
  1058.         beq.s    .quit
  1059.         cmp.w    #13,d0
  1060.         beq.s    .quit
  1061.         cmp.w    #32,d0
  1062.         beq.s    .quit
  1063.         tst.w    d0
  1064.         beq.s    .skip
  1065.         move.l    #mnu_errcursanim,mnu_frameptr
  1066. .skip:        moveq.l    #-1,d0
  1067.         tst.w    d0
  1068.         rts
  1069. .quit:        st.b    mnu_quitflag
  1070.         moveq.l    #0,d0
  1071.         tst.w    d0
  1072.         rts        
  1073.  
  1074. mnu_quitflag:    dc.w    0
  1075.  
  1076. mnu_playgame:    cmp.w    #1,mnu_playtype        ; Is it 2 player master ???
  1077.         bne.w    .noplayermaster
  1078.         lea    mnu_2pmastermenu,a0
  1079.         bsr.w    mnu_domenu
  1080.         cmp.w    #1,mnu_currentsel
  1081.         bne.s    .rts
  1082.         bsr.w    mnu_cls
  1083.         lea    mnu_slavewaittext,a0
  1084.         moveq.l    #6,d0
  1085.         moveq.l    #60,d1
  1086.         bsr.w    mnu_printxy
  1087.         clr.w    mnu_spread
  1088.         move.w    #4,mnu_curx
  1089.         move.w    #140,mnu_cury
  1090.         bsr.w    mnu_wait4slave
  1091.         tst.w    mnu_quitflag
  1092.         beq.s    .playgame
  1093. .rts:        rts
  1094. .noplayermaster:cmp.w    #2,mnu_playtype
  1095.         bne.w    .playgame
  1096.         bsr.w    mnu_cls
  1097.         lea    mnu_masterwaittext,a0
  1098.         moveq.l    #6,d0
  1099.         moveq.l    #60,d1
  1100.         bsr.w    mnu_printxy
  1101.         clr.w    mnu_spread
  1102.         move.w    #4,mnu_curx
  1103.         move.w    #140,mnu_cury
  1104.         bsr.w    mnu_wait4master
  1105.         tst.w    mnu_quitflag
  1106.         beq.s    .playgame
  1107.         rts
  1108. .playgame:    bsr.w    mnu_clearscreen
  1109.         ;-------------------------------------- Jump to game here !! --
  1110.         move.w    mnu_playtype,d0
  1111.         lea    .playtypeptr,a0
  1112.         move.l    (a0,d0.w*4),a0
  1113.         jsr    (a0)
  1114.         bsr.w    mnu_setscreen
  1115.         rts
  1116. .playtypeptr:    dc.l    mnu_play1p
  1117.         dc.l    mnu_play2pMaster
  1118.         dc.l    mnu_play2pSlave
  1119.  
  1120.  
  1121. *******************************************************************************
  1122. *******************************************************************************
  1123. *******************************************************************************
  1124. *******************************************************************************
  1125.  
  1126. mnu_wait4slave:    ; Wait for the slave to connect.
  1127. .loop:        bsr.w    mnu_test4quit        ; Check for "cancel" (and cursor)
  1128.         beq.s    .rts            ; Cancel key was selected
  1129.  
  1130. ;.............. Do your tests here .................................
  1131. ;.............. if the slave connects just exit with a rts .........
  1132.  
  1133.     btst    #6,$bfe001
  1134.     bne.s    .loop
  1135. .loop1:    btst    #6,$bfe001
  1136.     beq.s    .loop1
  1137.  
  1138. .rts:        rts
  1139.  
  1140. *******************************************************************************
  1141.  
  1142. mnu_wait4master:; Wait for the master to connect.
  1143. .loop:        bsr.w    mnu_test4quit        ; Check for "cancel" (and cursor)
  1144.         beq.s    .rts            ; Cancel key was selected
  1145.  
  1146. ;.............. Do your tests here ..................................
  1147. ;.............. if the master connects just exit with a rts .........
  1148.  
  1149.     btst    #6,$bfe001
  1150.     bne.s    .loop
  1151. .loop1:    btst    #6,$bfe001
  1152.     beq.s    .loop1
  1153.  
  1154. .rts:        rts
  1155.  
  1156. *******************************************************************************
  1157.  
  1158. mnu_play1p:    ; Do the 1 player game stuff here
  1159.  
  1160. .loop:    btst    #6,$bfe001
  1161.     bne.s    .loop
  1162.  
  1163.         rts
  1164.  
  1165. *******************************************************************************
  1166.  
  1167. mnu_play2pMaster:; Do the 2 player master game stuff here
  1168.  
  1169. .loop:    btst    #6,$bfe001
  1170.     bne.s    .loop
  1171.  
  1172.         rts
  1173.  
  1174. *******************************************************************************
  1175.  
  1176. mnu_play2pSlave:; Do the 2 player slave game stuff here
  1177.  
  1178. .loop:    btst    #6,$bfe001
  1179.     bne.s    .loop
  1180.  
  1181.         rts
  1182.  
  1183. *******************************************************************************
  1184.  
  1185. mnu_loadlevel:    ; Level to load is in mnu_currentlevel.w
  1186.         ; Current menu item is in mnu_currentsel.w (0 based)
  1187.         rts
  1188.  
  1189. *******************************************************************************
  1190.  
  1191. mnu_savelevel:    ; Level to save is in mnu_currentlevel.w
  1192.            ; Current menu item is in mnu_currentsel.w (0 based)
  1193.               ; Or all saved levels in the mnu_levellist+n*2.w
  1194.         rts
  1195.  
  1196. *******************************************************************************
  1197.  
  1198. ;        include    "demo:System/KeyBoard.S"
  1199.  
  1200. ****************************************************************** Variables **
  1201.  
  1202. mnu_2plevel:    dc.w    0
  1203. mnu_currentsel:    dc.w    0    ; Containes the current menu item
  1204. mnu_currentlevel:
  1205. mnu_level:    dc.w    0    ; Current level choosen. 0=A,1=B...
  1206.  
  1207. mnu_playtype:    dc.w    0    ; Selected type of game. 0=1 player
  1208.                 ;             1=2 player master
  1209.                 ;             2=2 player slave
  1210. ;------------------------------------------------- Rawcodes for control keys --
  1211. mnu_rawkeys:    ;----------------------------- Here are all defined raw keys --
  1212. mnu_key00:    dc.w    $4f    ; Turn left
  1213. mnu_key01:    dc.w    $4e    ; Turn right
  1214. mnu_key02:    dc.w    $4c    ; Forwards
  1215. mnu_key03:    dc.w    $4d    ; Backwards
  1216. mnu_key04:    dc.w    101    ; Fire
  1217. mnu_key05:    dc.w    $40    ; Operate door
  1218. mnu_key06:    dc.w    97    ; Run
  1219. mnu_key07:    dc.w    103    ; Force sidestep
  1220. mnu_key08:    dc.w    57    ; Sidestep left
  1221. mnu_key09:    dc.w    58    ; Sidestep right
  1222. mnu_key10:    dc.w    34    ; Duck
  1223. mnu_key11:    dc.w    40    ; Look behind
  1224. mnu_key12:    dc.w    15    ; Jump
  1225. mnu_key13:    dc.w    27    ; Look up
  1226. mnu_key14:    dc.w    42    ; Look down
  1227. mnu_key15:    dc.w    41    ; Centre view
  1228. ;------------------------------------------- Put other reserved keys here !! --
  1229.         dc.w    69    ; Escape
  1230.         dc.w    1,2,3,4,5,6,7,8,9,10    ; Weapon selects
  1231.         dc.w    80    ; Zoom in on map
  1232.         dc.w    81    ; Zoom out on map
  1233.         dc.w    82    ; 4/8 Channel sound
  1234.         dc.w    83    ; Mono/Stereo sound
  1235.         dc.w    84    ; Recall message
  1236.         dc.w    85    ; Render quality
  1237.         dc.w    29    ; Map down left
  1238.         dc.w    30    ; Map down
  1239.         dc.w    31    ; Map down right
  1240.         dc.w    45    ; Map left
  1241.         dc.w    46    ; Center map
  1242.         dc.w    47    ; Map right
  1243.         dc.w    61    ; Map up left
  1244.         dc.w    62    ; Map up
  1245.         dc.w    63    ; Map up right
  1246.         dc.w    -1    ; End list with -1
  1247.  
  1248. mnu_levellist:;----------------------------- Current levels in the save list --
  1249. mnu_saved0:    dc.w    0        ; Level number for saved pos 0
  1250. mnu_saved1:    dc.w    1        
  1251. mnu_saved2:    dc.w    3
  1252. mnu_saved3:    dc.w    8
  1253. mnu_saved4:    dc.w    4
  1254. mnu_saved5:    dc.w    11
  1255.  
  1256. mnu_xsine0:    dc.w    0
  1257. mnu_xsine1:    dc.w    0
  1258. mnu_ysine0:    dc.w    0
  1259. mnu_ysine1:    dc.w    0
  1260.  
  1261. mnu_sines:
  1262.     dc.w    $0006,$0013,$001f,$002c,$0038,$0045,$0052,$005e,$006b,$0077
  1263.     dc.w    $0083,$0090,$009c,$00a9,$00b5,$00c1,$00ce,$00da,$00e6,$00f2
  1264.     dc.w    $00ff,$010b,$0117,$0123,$012f,$013b,$0147,$0153,$015f,$016a
  1265.     dc.w    $0176,$0182,$018d,$0199,$01a4,$01b0,$01bb,$01c6,$01d2,$01dd
  1266.     dc.w    $01e8,$01f3,$01fe,$0209,$0213,$021e,$0229,$0233,$023e,$0248
  1267.     dc.w    $0252,$025c,$0266,$0270,$027a,$0284,$028e,$0297,$02a1,$02aa
  1268.     dc.w    $02b4,$02bd,$02c6,$02cf,$02d8,$02e1,$02e9,$02f2,$02fa,$0303
  1269.     dc.w    $030b,$0313,$031b,$0323,$032a,$0332,$0339,$0341,$0348,$034f
  1270.     dc.w    $0356,$035d,$0364,$036a,$0371,$0377,$037d,$0383,$0389,$038f
  1271.     dc.w    $0395,$039a,$039f,$03a5,$03aa,$03af,$03b4,$03b8,$03bd,$03c1
  1272.     dc.w    $03c5,$03c9,$03cd,$03d1,$03d5,$03d8,$03dc,$03df,$03e2,$03e5
  1273.     dc.w    $03e7,$03ea,$03ed,$03ef,$03f1,$03f3,$03f5,$03f7,$03f8,$03f9
  1274.     dc.w    $03fb,$03fc,$03fd,$03fd,$03fe,$03ff,$03ff,$03ff,$03ff,$03ff
  1275.     dc.w    $03ff,$03fe,$03fd,$03fd,$03fc,$03fb,$03f9,$03f8,$03f7,$03f5
  1276.     dc.w    $03f3,$03f1,$03ef,$03ed,$03ea,$03e7,$03e5,$03e2,$03df,$03dc
  1277.     dc.w    $03d8,$03d5,$03d1,$03cd,$03c9,$03c5,$03c1,$03bd,$03b8,$03b4
  1278.     dc.w    $03af,$03aa,$03a5,$039f,$039a,$0395,$038f,$0389,$0383,$037d
  1279.     dc.w    $0377,$0371,$036a,$0364,$035d,$0356,$034f,$0348,$0341,$0339
  1280.     dc.w    $0332,$032a,$0323,$031b,$0313,$030b,$0303,$02fa,$02f2,$02e9
  1281.     dc.w    $02e1,$02d8,$02cf,$02c6,$02bd,$02b4,$02aa,$02a1,$0297,$028e
  1282.     dc.w    $0284,$027a,$0270,$0266,$025c,$0252,$0248,$023e,$0233,$0229
  1283.     dc.w    $021e,$0213,$0209,$01fe,$01f3,$01e8,$01dd,$01d2,$01c6,$01bb
  1284.     dc.w    $01b0,$01a4,$0199,$018d,$0182,$0176,$016a,$015f,$0153,$0147
  1285.     dc.w    $013b,$012f,$0123,$0117,$010b,$00ff,$00f2,$00e6,$00da,$00ce
  1286.     dc.w    $00c1,$00b5,$00a9,$009c,$0090,$0083,$0077,$006b,$005e,$0052
  1287.     dc.w    $0045,$0038,$002c,$001f,$0013,$0006,$fffa,$ffed,$ffe1,$ffd4
  1288.     dc.w    $ffc8,$ffbb,$ffae,$ffa2,$ff95,$ff89,$ff7d,$ff70,$ff64,$ff57
  1289.     dc.w    $ff4b,$ff3f,$ff32,$ff26,$ff1a,$ff0e,$ff01,$fef5,$fee9,$fedd
  1290.     dc.w    $fed1,$fec5,$feb9,$fead,$fea1,$fe96,$fe8a,$fe7e,$fe73,$fe67
  1291.     dc.w    $fe5c,$fe50,$fe45,$fe3a,$fe2e,$fe23,$fe18,$fe0d,$fe02,$fdf7
  1292.     dc.w    $fded,$fde2,$fdd7,$fdcd,$fdc2,$fdb8,$fdae,$fda4,$fd9a,$fd90
  1293.     dc.w    $fd86,$fd7c,$fd72,$fd69,$fd5f,$fd56,$fd4c,$fd43,$fd3a,$fd31
  1294.     dc.w    $fd28,$fd1f,$fd17,$fd0e,$fd06,$fcfd,$fcf5,$fced,$fce5,$fcdd
  1295.     dc.w    $fcd6,$fcce,$fcc7,$fcbf,$fcb8,$fcb1,$fcaa,$fca3,$fc9c,$fc96
  1296.     dc.w    $fc8f,$fc89,$fc83,$fc7d,$fc77,$fc71,$fc6b,$fc66,$fc61,$fc5b
  1297.     dc.w    $fc56,$fc51,$fc4c,$fc48,$fc43,$fc3f,$fc3b,$fc37,$fc33,$fc2f
  1298.     dc.w    $fc2b,$fc28,$fc24,$fc21,$fc1e,$fc1b,$fc18,$fc16,$fc13,$fc11
  1299.     dc.w    $fc0f,$fc0d,$fc0b,$fc09,$fc08,$fc07,$fc05,$fc04,$fc03,$fc03
  1300.     dc.w    $fc02,$fc01,$fc01,$fc01,$fc01,$fc01,$fc01,$fc02,$fc03,$fc03
  1301.     dc.w    $fc04,$fc05,$fc07,$fc08,$fc09,$fc0b,$fc0d,$fc0f,$fc11,$fc13
  1302.     dc.w    $fc16,$fc19,$fc1b,$fc1e,$fc21,$fc24,$fc28,$fc2b,$fc2f,$fc33
  1303.     dc.w    $fc37,$fc3b,$fc3f,$fc43,$fc48,$fc4c,$fc51,$fc56,$fc5b,$fc61
  1304.     dc.w    $fc66,$fc6b,$fc71,$fc77,$fc7d,$fc83,$fc89,$fc8f,$fc96,$fc9c
  1305.     dc.w    $fca3,$fcaa,$fcb1,$fcb8,$fcbf,$fcc7,$fcce,$fcd6,$fcdd,$fce5
  1306.     dc.w    $fced,$fcf5,$fcfd,$fd06,$fd0e,$fd17,$fd1f,$fd28,$fd31,$fd3a
  1307.     dc.w    $fd43,$fd4c,$fd56,$fd5f,$fd69,$fd72,$fd7c,$fd86,$fd90,$fd9a
  1308.     dc.w    $fda4,$fdae,$fdb8,$fdc2,$fdcd,$fdd7,$fde2,$fded,$fdf7,$fe02
  1309.     dc.w    $fe0d,$fe18,$fe23,$fe2e,$fe3a,$fe45,$fe50,$fe5c,$fe67,$fe73
  1310.     dc.w    $fe7e,$fe8a,$fe96,$fea1,$fead,$feb9,$fec5,$fed1,$fedd,$fee9
  1311.     dc.w    $fef5,$ff01,$ff0e,$ff1a,$ff26,$ff32,$ff3f,$ff4b,$ff57,$ff64
  1312.     dc.w    $ff70,$ff7d,$ff89,$ff95,$ffa2,$ffae,$ffbb,$ffc8,$ffd4,$ffe1
  1313.     dc.w    $ffed,$fffa
  1314.  
  1315. mnu_mainstack:    dc.l    0
  1316.  
  1317. ;--------------------------------------------------------------- Slider data --
  1318.  
  1319. mnu_sliderwidth:dc.w    6
  1320. mnu_sliddat:    dc.l    mnu_font+40*16+7*2
  1321. mnu_leftslider:    dc.b    58,0
  1322. mnu_sliderspace: dcb.b    20,0
  1323. mnu_rightslider:dc.b    60,0
  1324. mnu_rawprint:    dc.b    0,0
  1325.         even
  1326. ;----------------------------------------------------------------- Menu data --
  1327.  
  1328. mnu_curx:    dc.w    5
  1329. mnu_cury:    dc.w    78
  1330. mnu_spread:    dc.w    40
  1331. mnu_items:    dc.w    3
  1332.  
  1333. mnu_arrow:    dc.b    ' ',0
  1334. mnu_cleararrow:    dc.b    ' ',0
  1335. mnu_row:    dc.w    30000
  1336. mnu_oldrow:    dc.w    30000
  1337. mnu_screenpos:    dc.w    0
  1338.  
  1339. mnu_printdelay:    dc.l    2
  1340.  
  1341. ;----------------------------------------------------------------- Fire data --
  1342.  
  1343. mnu_rndptr:    dc.l    mnu_morescreen+6*40*256
  1344. mnu_sourceptrs:    dc.l    mnu_morescreen+3*40*256+mnu_speed*40
  1345.         dc.l    mnu_morescreen+4*40*256+mnu_speed*40
  1346.         dc.l    mnu_morescreen+5*40*256+mnu_speed*40
  1347.  
  1348. ;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Menues %%
  1349.  
  1350. ; Types:    0 = Do nothing
  1351. ;        1 = Sub menu
  1352. ;        2 = Exit sub menu
  1353. ;        3 = Execute subroutine
  1354. ;               4 = Slider
  1355. ;               5 = Cycler
  1356. ;        6 = Branch (SP) set to value in mnu_mainstack
  1357. ;        7 = Change menu
  1358. ;        8 = Get raw key
  1359. ;        9 = Level Load
  1360. ;              10 = Level Save
  1361.  
  1362. mnu_askfordisk:
  1363.         dc.w 6,12
  1364.         dc.l mnu_askfordisktext
  1365.         dc.w 4,70
  1366.         dc.w 20
  1367.         dc.w 1
  1368.         dc.l 2,0
  1369.  
  1370. mnu_mainmenu:    dc.w    6,12            ; X,Y
  1371.         dc.l    mnu_maintext        ; Text ptr
  1372.         dc.w    4,70            ; XCursor,YCursor
  1373.         dc.w    20            ; Spread
  1374.         dc.w    7            ; Items
  1375.         dc.l    5,mnu_playercycler    ; Change player type
  1376.         dc.l    3,mnu_playgame
  1377.         dc.l    1,mnu_controlmenu0
  1378.         dc.l    3,mnu_viewcredz
  1379.         dc.l    1,mnu_loadmenu
  1380.         dc.l    1,mnu_savemenu
  1381.         dc.l    2,0            ; 2=Exit sub menu (Esc)
  1382.  
  1383. mnu_controlmenu0:dc.w    6,32            ; X,Y
  1384.         dc.l    mnu_controltext0    ; Text ptr
  1385.         dc.w    4,50            ; XCursor,YCursor
  1386.         dc.w    20            ; Spread
  1387.         dc.w    9            ; Items
  1388.         dc.l    8,mnu_key00
  1389.         dc.l    8,mnu_key01
  1390.         dc.l    8,mnu_key02
  1391.         dc.l    8,mnu_key03
  1392.         dc.l    8,mnu_key04
  1393.         dc.l    8,mnu_key05
  1394.         dc.l    8,mnu_key06
  1395.         dc.l    8,mnu_key07
  1396.         dc.l    7,mnu_controlmenu1
  1397.  
  1398. mnu_controlmenu1:dc.w    6,32            ; X,Y
  1399.         dc.l    mnu_controltext1    ; Text ptr
  1400.         dc.w    4,50            ; XCursor,YCursor
  1401.         dc.w    20            ; Spread
  1402.         dc.w    9            ; Items
  1403.         dc.l    8,mnu_key08
  1404.         dc.l    8,mnu_key09
  1405.         dc.l    8,mnu_key10
  1406.         dc.l    8,mnu_key11
  1407.         dc.l    8,mnu_key12
  1408.         dc.l    8,mnu_key13
  1409.         dc.l    8,mnu_key14
  1410.         dc.l    8,mnu_key15
  1411.         dc.l    7,mnu_controlmenu2
  1412.  
  1413. mnu_controlmenu2:dc.w    4,12            ; X,Y
  1414.         dc.l    mnu_controltext2    ; Text ptr
  1415.         dc.w    4,210            ; XCursor,YCursor
  1416.         dc.w    20            ; Spread
  1417.         dc.w    1            ; Items
  1418.         dc.l    7,mnu_controlmenu0
  1419.  
  1420. mnu_loadmenu:    dc.w    4,42
  1421.         dc.l    mnu_loadmenutext
  1422.         dc.w    4,80            ; XCursor,YCursor
  1423.         dc.w    20            ; Spread
  1424.         dc.w    7            ; Items
  1425.         dc.l    9,mnu_saved0
  1426.         dc.l    9,mnu_saved1
  1427.         dc.l    9,mnu_saved2
  1428.         dc.l    9,mnu_saved3
  1429.         dc.l    9,mnu_saved4
  1430.         dc.l    9,mnu_saved5
  1431.         dc.l    2,0
  1432.  
  1433. mnu_savemenu:    dc.w    4,42
  1434.         dc.l    mnu_savemenutext
  1435.         dc.w    4,80            ; XCursor,YCursor
  1436.         dc.w    20            ; Spread
  1437.         dc.w    7            ; Items
  1438.         dc.l    10,mnu_saved0
  1439.         dc.l    10,mnu_saved1
  1440.         dc.l    10,mnu_saved2
  1441.         dc.l    10,mnu_saved3
  1442.         dc.l    10,mnu_saved4
  1443.         dc.l    10,mnu_saved5
  1444.         dc.l    2,0
  1445.  
  1446. mnu_quitmenu:    dc.w    4,82
  1447.         dc.l    mnu_quitmenutext
  1448.         dc.w    4,120            ; XCursor,YCursor
  1449.         dc.w    20            ; Spread
  1450.         dc.w    2            ; Items
  1451.         dc.l    6,mnu_loop
  1452.         dc.l    6,mnu_exit
  1453.  
  1454. mnu_2pmastermenu:
  1455.         dc.w    4,82
  1456.         dc.l    mnu_2pmastertext
  1457.         dc.w    4,120            ; XCursor,YCursor
  1458.         dc.w    20            ; Spread
  1459.         dc.w    3            ; Items
  1460.         dc.l    5,mnu_levelcycler
  1461.         dc.l    2,0
  1462.         dc.l    2,0
  1463.  
  1464. ;--------------------------------------------------------------------- Texts --
  1465.  
  1466. mnu_askfordisktext:
  1467.         dc.b 'Please Insert',1
  1468.         dc.b 'Volume',1
  1469.         dc.b '             ',0
  1470.  
  1471. mnu_slavewaittext:
  1472.         dc.b    'Waiting for ',1
  1473.         dc.b    'your opponent',1
  1474.         dc.b    'to respond...',1,1
  1475.         dc.b    58,58,'Cancel',0
  1476.  
  1477. mnu_masterwaittext:
  1478.         dc.b    'Waiting for ',1
  1479.         dc.b    'your opponent',1
  1480.         dc.b    'to respond...',1,1
  1481.         dc.b    58,58,'Cancel',0
  1482.  
  1483. mnu_maintext:    dc.b    1,1
  1484.         dc.b    60,'Level '
  1485. mnu_mainleveltext:dc.b    'A',58,1        
  1486.         dc.b    1
  1487.         dc.b    'Play game',1
  1488.         dc.b    'Control options',1
  1489.         dc.b    'Game credits',1
  1490.         dc.b    'Load position',1
  1491.         dc.b    'Save position',1
  1492.         dc.b    'Quit',1
  1493.         dc.b    0
  1494.  
  1495. mnu_quitmenutext:dc.b    ' Quit game',131,131,131,1,1
  1496.         dc.b    ' No,I',39,'m addicted',1
  1497.         dc.b    ' Yes! Let me OUT',1
  1498.         dc.b    0
  1499.  
  1500. mnu_2pmastertext:dc.b    ' 2 Player master',1,1
  1501.         dc.b    ' Play level',1
  1502.         dc.b    ' Start game',1
  1503.         dc.b    ' ',58,58,'Cancel',1
  1504.         dc.b    0
  1505.  
  1506. mnu_loadmenutext:dc.b    ' Load game',1,1
  1507.         dc.b    1,1,1,1,1,1
  1508.         dc.b    ' ',58,58,'Cancel',58,58,0
  1509.  
  1510. mnu_savemenutext:dc.b    ' Save game',1,1
  1511.         dc.b    1,1,1,1,1,1
  1512.         dc.b    ' ',58,58,'Cancel',58,58,0
  1513.         
  1514. mnu_controltext0:dc.b    1
  1515.         dc.b    ' Turn left',1
  1516.         dc.b    ' Turn right',1
  1517.         dc.b    ' Forwards',1
  1518.         dc.b    ' Backwards',1
  1519.         dc.b    ' Fire',1
  1520.         dc.b    ' Operate door',1
  1521.         dc.b    ' Run',1
  1522.         dc.b    ' Sidestep',1
  1523.         dc.b    60,60,'More',60,60,1
  1524.         dc.b    0
  1525.  
  1526. mnu_controltext1:dc.b    1
  1527.         dc.b    ' Sidestep left',1
  1528.         dc.b    ' Sidestep right',1
  1529.         dc.b    ' Duck',1
  1530.         dc.b    ' Look behind',1
  1531.         dc.b    ' Jump',1
  1532.         dc.b    ' Look up',1
  1533.         dc.b    ' Look down',1
  1534.         dc.b    ' Centre view',1
  1535.         dc.b    60,60,'Others',60,60,1
  1536.         dc.b    0
  1537.  
  1538. mnu_controltext2:dc.b    1
  1539.         dc.b    157,'Pause',1
  1540.         dc.b    212,'Zoom in on map',1
  1541.         dc.b    213,'Zoom out on map',1
  1542.         dc.b    214,'4/8 Ch. sound',1
  1543.         dc.b    215,'Mono/Stereo snd',1
  1544.         dc.b    216,'Recall message',1
  1545.         dc.b    217,'Render quality',1
  1546.         dc.b    133,'-',142,'Select weapon',1
  1547.         dc.b    161,'-',195,'Scroll map',1
  1548.         dc.b    ' ',58,58,'Back',58,58,1
  1549.         dc.b    0
  1550.  
  1551. mnu_leveltext:    dc.b    'Level '
  1552. mnu_levelno:    dc.b    'A',0
  1553.  
  1554.         even
  1555. ;------------------------------------------------------- Cyclers and sliders --
  1556.  
  1557. mnu_level0:    dc.b    'A',0
  1558. mnu_level1:    dc.b    'B',0
  1559. mnu_level2:    dc.b    'C',0
  1560. mnu_level3:    dc.b    'D',0
  1561. mnu_level4:    dc.b    'E',0
  1562. mnu_level5:    dc.b    'F',0
  1563. mnu_level6:    dc.b    'G',0
  1564. mnu_level7:    dc.b    'H',0
  1565. mnu_level8:    dc.b    'I',0
  1566. mnu_level9:    dc.b    'J',0
  1567. mnu_level10:    dc.b    'K',0
  1568. mnu_level11:    dc.b    'L',0
  1569. mnu_level12:    dc.b    'M',0
  1570. mnu_level13:    dc.b    'N',0
  1571. mnu_level14:    dc.b    'O',0
  1572. mnu_level15:    dc.b    'P',0
  1573.         even
  1574.  
  1575. mnu_levelcycler:dc.w    24,2            ; X,Y Add
  1576.         dc.w    16            ; #of items
  1577.         dc.l    mnu_2plevel        ; Value to effect
  1578.         dc.l    mnu_level0
  1579.         dc.l    mnu_level1
  1580.         dc.l    mnu_level2
  1581.         dc.l    mnu_level3
  1582.         dc.l    mnu_level4
  1583.         dc.l    mnu_level5
  1584.         dc.l    mnu_level6
  1585.         dc.l    mnu_level7
  1586.         dc.l    mnu_level8
  1587.         dc.l    mnu_level9
  1588.         dc.l    mnu_level10
  1589.         dc.l    mnu_level11
  1590.         dc.l    mnu_level12
  1591.         dc.l    mnu_level13
  1592.         dc.l    mnu_level14
  1593.         dc.l    mnu_level15
  1594.         even
  1595.  
  1596. mnu_playercycler:dc.w    2,2            ; X,Y Add
  1597.         dc.w    3            ; #of items
  1598.         dc.l    mnu_playtype        ; Value to effect
  1599.         dc.l    mnu_playtype0
  1600.         dc.l    mnu_playtype1
  1601.         dc.l    mnu_playtype2
  1602.         even
  1603.  
  1604. mnu_playtype0:    dc.b    '1 Player       ',0
  1605. mnu_playtype1:    dc.b    '2 Player master',0
  1606. mnu_playtype2:    dc.b    '2 Player slave ',0
  1607.  
  1608. ;----------------------------------------------------------------- Animation --
  1609.         
  1610. mnu_frameptr:    dc.l    mnu_cursanim
  1611.  
  1612. mnu_errcursanim:dc.b    240,240,241,241,242,242,243,243
  1613.         dc.b    240,240,241,241,242,242,243,243
  1614.         dc.b    240,240,241,241,242,242,243,243
  1615.         dc.b    240,240,241,241,242,242,243,243
  1616. mnu_cursanim:    dc.b    130,129,128,127,126,125,124,123,8
  1617.         even
  1618.  
  1619. mnu_errbutanim:    dc.b    240,240,241,241,242,242,243,243
  1620.         dc.b    240,240,241,241,242,242,243,243
  1621.         dc.b    240,240,241,241,242,242,243,243
  1622.         dc.b    240,240,241,241,242,242,243,243
  1623. mnu_buttonanim:    dc.b    236,236,236,236
  1624.         dc.b    237,237,237,237
  1625.         dc.b    238,238,238,238
  1626.         dc.b    239,239,239,239
  1627.         dc.b    238,238,238,238
  1628.         dc.b    237,237,237,237
  1629.         dc.b    24
  1630.  
  1631.         even
  1632. mnu_font:    incbin    "demo:Menu/Font16x16.Raw2"
  1633. mnu_fontpal:    incbin    "demo:Menu/Font16x16.Pal2"
  1634. mnu_firepal:    incbin    "Demo:Menu/FirePal.Pal2"
  1635. mnu_backpal:    incbin    "demo:Menu/Back.Pal"
  1636.  
  1637. mnu_palette:    ds.l    256
  1638.  
  1639. mnu_frame:    incbin    "demo:Menu/Credits.Raw"
  1640.  
  1641.         section    data_b,bss
  1642.  
  1643. mnu_savedcredz:    ds.b    40*256*3
  1644.  
  1645.         section    data_c,data_c
  1646.  
  1647. mnu_copper:
  1648.         dc.w intreq,$8010
  1649.         dc.l    $01000211,$01020000,$01040000
  1650.         dc.l    $0108fff8,$010afff8,$010c0000
  1651.         dc.l    $01fc0003
  1652.         dc.l    $008e2881,$009028c1,$00920038,$009400d0
  1653. mnu_bplptrs:    dc.l    $00e00000,$00e20000,$00e40000,$00e60000
  1654.         dc.l    $00e80000,$00ea0000,$00ec0000,$00ee0000
  1655.         dc.l    $00f00000,$00f20000,$00f40000,$00f60000
  1656.         dc.l    $00f80000,$00fa0000,$00fc0000,$00fe0000
  1657. mnu_colptrs:    ds.l    (32+1)*8*2+1
  1658.         cnop    64,64
  1659.  
  1660. mnu_screen:    incbin    "Demo:Menu/Back2.Raw"
  1661.         ds.b    40*256*2
  1662.  
  1663. mnu_morescreen:    ds.b    40*256*8
  1664.  
  1665. counter: dc.l 0
  1666. main_vblint: dc.l 0
  1667. main_counter: dc.l 0
  1668. main_bltint: dc.l 0
  1669. main_vbrbase: dc.l 0
  1670. timer: dc.l 0